// 第一步是通过express.Router创建一个 router
// 第二步是创建router.post/get 接口
// 第三部是module.exports = router 暴露模块
const express = require('express')
const multer = require('multer')
const Result = require('../models/Result')
const { UPLOAD_PATH } = require('../utils/constant')
const Book = require('../models/Book')
const boom = require('boom')
const {decoded} = require('../utils')
const bookService = require('../services/book')

const router = express.Router()

console.log(UPLOAD_PATH)
router.post(
    '/upload',
    multer({
        dest:`${UPLOAD_PATH}/book`
    }).single('file'),
    function (req, res, next) {
        if(!req.file || req.file.length == 0){
            new Result('上传电子书失败').fail(res)
        }else{
            const book = new Book(req.file)
            book.parse().then(book =>{
                // console.log('bookzzz', book)
                new Result(book,'上传电子书成功').success(res)
            }).catch(err=>{
                next(boom.badImplementation(err))
            })
        }
    }
)


router.post(
    '/create',
    function (req, res, next) {
        const decode = decoded(req)
        // console.log(decode)
        if(decode && decode.username){
            req.body.username = decode.username
        }
        const book = new Book(null,req.body)
        bookService.insertBook(book).then(()=>{
            new Result('添加电子书成功').success(res)
        }).catch(err =>{
            next(boom.badImplementation(err))
        })
    }
)

router.get('/get', function (req, res, next) {
    const {fileName} = req.query
    if(!fileName){
        next(boom.badRequest(new Error('参数fileName不能为空')))
    }else{
        bookService.getBook(fileName).then(book=>{
            new Result(book,'获取电子书信息成功').success(res)
        }).catch(err=>{
            next(boom.badImplementation(err))
        })
    }
})

router.get('/category', function (req, res, next) {
    bookService.getCategory().then(category=>{
        new Result(category,'获取分类成功').success(res)
    }).catch(err=>{
        next(boom.badImplementation(err))
    })
})

router.get('/list', function (req, res, next) {
    bookService.listBook(req.query)
        .then(({list,count,page,pageSize})=>{
        new Result({list,count,page:+page,pageSize:+pageSize},'获取图书列表成功').success(res)
    }).catch(err=>{
        next(boom.badImplementation(err))
    })
})

router.get('/delete', function (req, res, next) {
    const {fileName} = req.query
    if(!fileName){
        next(boom.badRequest(new Error('参数fileName不能为空')))
    }else{
        bookService.deleteBook(fileName).then(()=>{
            new Result('删除电子书信息成功').success(res)
        }).catch(err=>{
            next(boom.badImplementation(err))
        })
    }
})

router.post(
    '/update',
    function (req, res, next) {
        const decode = decoded(req)
        // console.log(decode)
        if(decode && decode.username){
            req.body.username = decode.username
        }
        const book = new Book(null,req.body)
        bookService.updateBook(book).then(()=>{
            new Result('更新电子书成功').success(res)
        }).catch(err =>{
            next(boom.badImplementation(err))
        })
    }
)

module.exports = router